<?php
require_once("user.php");
require_once("role.php");
require_once("resource.php");
require_once("Asignation.php");
require_once("Permission.php");
require_once("session.php");

require_once($root_path.'modules/rbac/db/dbinterface.php');
//require_once('/var/www/sinapsisvn/modules/rbac/db/dbinterface.php');
class rbac{

    public function Asignar_rol_usuario($nombreRol,$login,$asignador){
        $asignation=new asignation();
        $result=$asignation->Insertar_asignacion($login,$nombreRol,$asignador);
        return $result;
    }
    //Función que permite asignar un rol con el nombre $nombreRol a un usuario con el nombre de usuario $login, siendo $asignador quien realiza esta acción.

    public function Revocar_rol_usuario($nombreRol,$login,$revocador){
        $asignation=new asignation();
        $result=$asignation->Eliminar_asignacion($nombreRol,$login,$revocador);
        return $result;
    }//Función que permite revocar un rol con el nombre $nombreRol de un usuario con el nombre de usuario $login. Siendo $revocador quien realiza esta acción.

    public function Buscar_rol_usuario($nombreRol,$login,$asignador){
        $asignation=new asignation();
        $result=$asignation->Seleccionar_asignacion($login,$nombreRol,$asignador);
        return $result;
    }

    public function Buscar_rol_usuario1($nombreRol,$login,$asignador){
        $asignation=new asignation();
        $result=$asignation->Seleccionar_asignacion1($login,$nombreRol,$asignador);
        return $result;
    }
    public function Activar_rol_usuario($nombreRol,$login,$modificador){
        //echo("activar");
        $asignation=new asignation();
        $result=$asignation->Actualizar_asignacion($nombreRol,$login,NULL,NULL, 1, $modificador);
        return $result;
    }
    public function Desactivar_rol_usuario($nombreRol,$login,$modificador){
        //echo("desactivar");
        $asignation=new asignation();
        $result=$asignation->Actualizar_asignacion($nombreRol,$login,NULL,NULL, 0, $modificador);
        return $result;
    }

    public function Asignar_permiso($nombreRol, $nombreRecurso, $nombrePermiso, $asignador){
        $permission=new permission();
        $result=$permission->Insertar_permiso($nombreRecurso,$nombreRol,$nombrePermiso,$asignador);
        return $result;
    }//Función que permite asignar un permiso $nombrePermiso sobre un Recurso $nombreRecurso a un rol $nombreRol, siendo $asignador quien realiza esta acción.

    public function Revocar_permiso($nombreRol, $nombreRecurso, $nombrePermiso, $revocador){
        $permission=new permission();
        $result=$permission->Eliminar_permiso($nombreRol,$nombreRecurso,$nombrePermiso,$revocador);
        return $result;
    }//Función que permite revocar un permiso $nombrePermiso sobre Recurso $nombreRecurso de un rol $nombreRol  siendo $revocador quien realiza esta acción.

    public function Buscar_permiso($nombreRol, $nombreRecurso, $nombrePermiso, $buscador){
        $permission=new permission();
        $result=$permission->Seleccionar_permiso($nombreRecurso,$nombreRol,$nombrePermiso,$buscador);
        return $result;
    }
    public function Activar_permiso($nombreRol, $nombreRecurso, $permiso, $activador){
        //echo ("activar ".$nombreRol." ".$nombreRecurso." ".$permiso." ".$activador."");
        $permission=new permission();
        $result=$permission->Actualizar_permiso($nombreRol,$nombreRecurso,$permiso, "", "", "", 1, $activador);
        return $result;
    }//Función que permite activar un permiso $permiso de un Rol $nombreRol sobre un Recurso $nombreRecurso, siendo $activador quien realiza esta acción.


    public function Desactivar_permiso($nombreRol, $nombreRecurso, $permiso, $desactivador){
        //echo ("desactivar ".$nombreRol." ".$nombreRecurso." ".$permiso." ".$desactivador."");
        $permission=new permission();
        $result=$permission->Actualizar_permiso($nombreRol,$nombreRecurso,$permiso, "", "", "", 0, $desactivador);
        return $result;
    }//Función que permite desactivar un permiso $permiso de un Rol $nombreRol sobre un Recurso $nombreRecurso, siendo $desactivador quien realiza esta acción.


    public function Validar_permiso($nombreRecurso, $nombrePermiso, $login){

    }//Función que se encarga de verificar si el usuario con el nombre de usuario $login posee el permiso $nombrePermiso sobre el recurso $nombreRecurso. En caso de que lo posea, la función retorna TRUE, en caso contrario FALSE.

    public function Crear_usuario($login, $password, $creador){
        $user=new user();
        //echo("recibi esto ".$login." ".$password." ".$creador." " );
        $result=$user->Insertar_usuario($login,$password,$creador);
        return $result;
    }//Función que permite la creación de un nuevo usuario en el sistema con el nombre $login, contraseña $password, y que es creado por $creador. Todo nuevo usuario del sistema comienza sin ningún rol asignado (o con un rol de nuevo_usuario) e inactivo.

    public function Modificar_usuario($login, $nuevoLogin, $nuevoPassword, $nuevoEstado, $modificador){
        $user=new user();
        $result=$user->Actualizar_usuario($login, $nuevoLogin, $nuevoPassword, $nuevoEstado, $modificador);
        return $result;
    }//Función que permite modificar la cuenta de un usuario con el nombre de usuario $login, activando la cuenta del mismo, siendo $modificador quien realiza esta acción.


    public function Activar_usuario($login, $modificador){
        $user=new user();
        $result=$user->Actualizar_usuario($login, "", "", 1, $modificador);
        return $result;
    }//Función que permite modificar la cuenta de un usuario con el nombre de usuario $login, activando la cuenta del mismo, siendo $modificador quien realiza esta acción.


    public function Desactivar_usuario($login, $modificador){
        $user=new user();
        $result=$user->Actualizar_usuario($login, "", "", 0, $modificador);
        return $result;
    }//Función que permite modificar la cuenta de un usuario con el nombre de usuario $login, desactivando la cuenta del mismo, siendo $modificador quien realiza esta acción.


    public function Cambiar_login($login,$nuevoLogin, $modificador){
        $user=new user();
        $result=$user->Actualizar_usuario($login, $nuevoLogin, "", "", $modificador);
        return $result;
    }//Función que permite cambiar el login de un usuario $login por el login $nuevoLogin, siendo $modificador quien realiza esta acción.


    public function Cambiar_contraseña($login,$nuevoPassword, $modificador){
        $user=new user();
        $result=$user->Actualizar_usuario($login, "", $nuevoPassword, "", $modificador);
        return $result;
    }//Función que permite cambiar la contraseña de un usuario $login por la contraseña $nuevoPassword, siendo $modificador quien realiza esta acción.


    public function Destruir_usuario($login, $eliminador){
        //echo("usuario a eliminar ".$login." ".$eliminador." ");
        $user=new user();
        $result=$user->Eliminar_usuario($login, $eliminador);
        return $result;
    }//Función que permite eliminar la cuenta de un usuario con el nombre de usuario $login, siendo $eliminador quien realiza esta acción.


    public function Buscar_usuario($login, $buscador){
        $user=new user();
        $result=$user->Seleccionar_usuario($login, $buscador);
        return $result;
    }//Función que permite buscar usuario con el nombre de usuario $login, siendo $buscador quien realiza esta acción.


    public function Crear_rol($nombre, $creador){
        $role=new role();
        $result=$role->Insertar_rol($nombre,$creador);
        return $result;
    }//Función que permite la creación de un nuevo rol dentro del sistema. $nombre sera el nombre del rol a ser creado y $creador sera el usuario que habrá creado el rol. Todo rol creado inicia como inactivo dentro del sistema.

    public function Modificar_rol($nombre,$nuevoNombre,$nuevoEstado, $modificador){
        $role=new role();
        $result=$role->Actualizar_rol($nombre, $nuevoNombre, $nuevoEstado, $modificador);
        return $result;
    }


    public function Activar_rol($nombre, $modificador){
        $role=new role();
        $result=$role->Actualizar_rol($nombre, "", 1, $modificador);
        return $result;
    }//Función que permite activar un rol con el nombre $nombre . La modificación es hecha por el usuario $modificador.


    public function Desactivar_rol($nombre, $modificador){
        $role=new role();
        $result=$role->Actualizar_rol($nombre, "", 0, $modificador);
        return $result;
    }//Función que permite desactivar un rol con el nombre $nombre . La modificación es hecha por el usuario $modificador.


    public function Renombrar_rol($nombre, $nuevoNombre, $modificador){
        $role=new role();
        $result=$role->Actualizar_rol($nombre, $nuevoNombre, "", $modificador);
        return $result;
    }//Función que permite cambiar el nombre de un rol con el nombre $nombre, siendo el nuevo nombre $nuevoNombre. La modificación es hecha por el usuario $modificador.


    public function Destruir_rol($nombre, $eliminador){
        $role=new role();
        $result=$role->Eliminar_rol($nombre, $eliminador);
        return $result;
    }//Función que se encarga de eliminar un rol con el nombre $nombre dentro del sistema, siendo $eliminador quien realiza esta operación.


    public function Buscar_rol($nombre, $buscador){
        $role=new role();
        //echo ("recibi en rbac ".$nombre." ".$buscador."");
        $result=$role->Seleccionar_rol($nombre, $buscador);
        return $result;
    }//Función que se encarga de buscar un rol dentro del sistema con el nombre $nombre, siendo $buscador quien realiza esta búsqueda.

    public function verificar_tabla($nombre){
        $resource= new resource();
        $result=$resource->verificar_recurso($nombre);

        return $result;
    }//Función que permite verificar si un recuros es tabla o no.

    public function Crear_recurso($nombre, $tipo, $ubicacion, $creador){
        $resource= new resource();
        $result=$resource->Insertar_recurso($nombre,$tipo,$ubicacion,$creador);
        return $result;
    }//Función que se encarga de crear un nuevo recurso dentro del sistema con el nombre $nombre, $tipo el tipo de recurso, $ubicacion la ubicación del recurso dentro del sistema, y realizado por la persona $creador.


    public function Modificar_recurso($nombre,$nuevoNombre,$nuevoEstado,$nuevoTipo,$nuevaUbicacion,$modificador){
        $resource= new resource();
        $result=$resource->Actualizar_recurso($nombre,$nuevoNombre,$nuevoEstado,$nuevoTipo,$nuevaUbicacion,$modificador);
        return $result;
    }

    public function Cambiar_tipo($nombre, $nuevoTipo, $modificador){
        $resource= new resource();
        $result=$resource->Actualizar_recurso($nombre,"","",$nuevoTipo,"",$modificador);
        return $result;
    }//Funcion que permite cambiar el tipo de un recurso con el nombre $nombre por el tipo $nuevoTipo, siendo $modificador quien realiza esta acción.


    public function Cambiar_ubicacion($nombre, $nuevaUbicacion, $modificador){
        $resource= new resource();
        $result=$resource->Actualizar_recurso($nombre,"","","",$nuevaUbicacion,$modificador);
        return $result;
    }//Funcion que permite cambiar la ubicación de un recurso con el nombre $nombre por la ubicacion $nuevaUbicacion, siendo $modificador quien realiza esta accion.


    public function Renombrar_recurso($nombre, $nuevoNombre, $modificador){
        $resource= new resource();
        $result=$resource->Actualizar_recurso($nombre,$nuevoNombre,"","","",$modificador);
        return $result;
    }//Funcion que permite cambiar el nombre de un recurso con el nombre $nombre por el nombre $nuevoNombre, siendo $modificador quien realiza esta acción.


    public function Buscar_recurso($nombre, $buscador){
        $resource= new resource();
        $result=$resource->Seleccionar_recurso($nombre,$buscador);
        return $result;
    }//Función que se encargada de buscar un recurso dentro del sistema con el nombre $nombre, siendo $buscador quien realiza esta operación.


    public function Activar_recurso($nombre, $modificador){
        $resource= new resource();
        $result=$resource->Actualizar_recurso($nombre,"",1,"","",$modificador);
        return $result;
    }//Función que se encarga de activar un  recurso con el nombre $nombre,  siendo $modificador quien realiza esta acción.

    public function Desactivar_recurso($nombre, $modificador){
        $resource= new resource();
        $result=$resource->Actualizar_recurso($nombre,"",0,"","",$modificador);
        return $result;
    }//Función que se encarga de desactivar un  recurso con el nombre $nombre,  siendo $modificador quien realiza esta acción.

    public function Destruir_recurso($nombre, $eliminador){
        $resource= new resource();
        $result=$resource->Eliminar_recurso($nombre,$eliminador);
        return $result;
    }//Función que se encarga de eliminar un permiso con el nombre $nombre, siendo $eliminador quien realiza esta acción.

    public function Validar_operacion($operation, $resource, $user){
        $dbinterface=new dbinterface();
        $dbinterface->connect();
        $valid=$dbinterface->validar_operacion($operation, $resource, $user);
        return $valid;
    }

    public function Crear_session($login,$roles){
        $session=new session();
        $valid=$session->Insertar_session($login,$roles);
        return $valid;
    }
    
    public function Buscar_session($id){
        $session=new session();
        $valid=$session->Seleccionar_session($id);
        return $valid;
    }
    
    public function Destruir_session($id){
        $session=new session();
        $valid=$session->Eliminar_session($id);
        return $valid;
    }

    public function Cerrar_session($id){
        $session=new session();
        $valid=$session->Terminar_session($id);
        return $valid;
    }


	
}
?>
